package br.urca.controller;

import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;

import br.com.caelum.vraptor.Controller;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.controller.IndexController;
import br.com.caelum.vraptor.validator.I18nMessage;
import br.com.caelum.vraptor.validator.Severity;
import br.com.caelum.vraptor.validator.SimpleMessage;
import br.com.caelum.vraptor.validator.Validator;
import br.urca.dao.FuncionarioDAO;
import br.urca.dao.UsuarioDAO;
import br.urca.interceptor.InterceptResource;
import br.urca.interceptor.NoInterceptMethod;
import br.urca.model.AlunoCurso;
import br.urca.model.Funcionario;
import br.urca.model.Usuario;
import br.urca.session.UsuarioLogado;
import br.urca.util.Criptografia;

@Controller
@InterceptResource
public class LoginController {
	
	private UsuarioDAO mUsuarioDAO;
	private UsuarioLogado mLogado;
	private Result result;
	private Validator validator;
	private HttpServletRequest request;
	
	@Deprecated LoginController() {}

	@Inject
	public LoginController(UsuarioDAO mUsuarioDAO, HttpServletRequest request,
			UsuarioLogado mLogado, Result result, Validator validator) {
		super();
		this.mUsuarioDAO = mUsuarioDAO;
		this.mLogado = mLogado;
		this.result = result;
		this.validator = validator;
		this.request = request;
	}
	
	@NoInterceptMethod
	@Get("/login")	
	public void index() {
		if (mLogado.isLogado() && request.getSession().getAttribute("funcionario") != null) {
			result.redirectTo(IndexController.class).index();
		}
	}
	
	@NoInterceptMethod
	@Post("/login")
	public void login(String login, String senha) {			
		
		if (!mLogado.isLogado()) {
			validator.onErrorRedirectTo(this).index();
			
			validator.addIf((login == null) || (senha == null) ||
					(login.equalsIgnoreCase("")) || (senha.equalsIgnoreCase("")),
					new SimpleMessage("Erro", "Campo de login ou senha não preenchido!"));
			
			Usuario usuario = mUsuarioDAO.buscarPorNomeSenha(login, Criptografia.criptografarMD5(senha.trim()));

			
			validator.ensure(usuario != null, 
					new SimpleMessage("Erro",
							"Login ou senha inválida.", Severity.ERROR));
			
			validator.onErrorRedirectTo(this).index();
			
			request.getSession().setAttribute("funcionario", usuario.getNome());
			mLogado.loga(usuario);
			// ou a página inicial
		}
		result.include("login",login).redirectTo(IndexController.class).index();
		
		/*//Valida dados
		if ((login == null) || (senha == null) ||
				(login.equalsIgnoreCase("")) || (senha.equalsIgnoreCase(""))) {
			result.include("mensagem","Campo de matrícula ou senha não preenchido!");
			result.redirectTo(this).index();
			return;
		}
		
		validator.ensure(funcionario != null, 
				new I18nMessage("usuario",
						"login.ou.senha.invalidos"));
		if (funcionario == null)
			result.include("mensagem","Matrícula ou senha inválida.");
		validator.onErrorRedirectTo(this).index();
		mLogado.loga(funcionario);
		// ou a página inicial
		result.redirectTo(IndexController.class).index();*/
	}
	
	private String removeMascara(String login) {
		if (login != null)
			return login.replaceAll("-", "");
		else
			return "";
	}
	
	@NoInterceptMethod
	@Get("/logout")
	public void logout() {
		mLogado.logout();
		this.request.removeAttribute("funcionario");
		if (this.request.getSession() != null)
			this.request.getSession().invalidate();
		result.redirectTo(this).index();
	}
	
}
